package com.bangdao.stream;

/**
 * @author chen
 * @create 2021-01-06
 */

import java.util.UUID;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * Lambda表达式需要“函数式接口”的支持。
 *
 * 函数式接口：**接口中只有一个抽象方法时**，那么这个接口叫做函数式接口。
 *
 * 函数式接口可以使用@FunctionalInterface修饰，jvm会自动检查该接口是否为函数式接口。
 */
public class StreamDemo {
    public static void main(String[] args) {
        // void accept(T t);消费型接口，一个参数，没有返回值
        Consumer<String> consumer = t -> {
            System.out.println("消费型接口：" + t);
        };
        consumer.accept("consumer");

        // T get(); 供给型接口，无参数，有返回值
        Supplier<String> supplier = () -> UUID.randomUUID().toString();
        System.out.println("供给型接口：" + supplier.get());

        // R apply(T t);函数型接口，一个参数，一个返回值
        Function<String, String> function = t -> "函数式接口：" + t;
        System.out.println(function.apply("function"));

        // boolean test(T t);断定型接口，一个参数，返回boolean
        Predicate<String> predicate = t -> t.contains("abc");
        System.out.println("断定性接口：" + predicate.test("sfdf"));
    }
}
